Skip to main content

為什麼該用 uv 取代傳統的 Python venv?

· 12 min read
Willis Chen

為什麼該用 uv 取代傳統的 Python venv?

你有沒有遇過這種狀況:寫 Python 程式時,明明在自己電腦能跑,但換到同學的電腦就出錯?或者安裝了一個新套件後,之前的程式竟然跑不動了?

這就像你在房間裡亂丟衣服,最後找不到想穿的衣服一樣!今天要介紹一個超厲害的工具 uv,它就像是幫你整理房間的魔法管家,讓每個 Python 專案都有自己整齊的「小房間」。

一、什麼是 uv?為什麼它這麼厲害?

想像一下,你的電腦就像是一個大宿舍,每個 Python 專案就像是一個學生。如果所有學生都住在同一間房間,就會很亂:

  • 小明要用 Pandas 1.5 做作業
  • 小華要用 Pandas 2.0 做專題
  • 結果兩個版本互相打架,誰的程式都跑不動!

uv 就像是宿舍管理員,它會給每個專案分配一個獨立的房間(虛擬環境),讓大家各自安心使用需要的工具。

uv 是一個用 Rust 語言製作的超快工具,它可以幫你:

  • 🏠 建立虛擬環境(取代 venv)- 就像給每個專案一個獨立房間
  • 📦 安裝和管理套件(取代 pip)- 就像幫你整理房間裡的物品
  • 🐍 管理 Python 的不同版本(取代 pyenv)- 就像準備不同年級需要的教科書
  • 🔒 建立穩定的鎖檔(lockfile)- 就像記錄每個房間裡有什麼東西
  • ⚡ 快速執行工具(取代 pipx)- 就像借用工具但不用搬到自己房間

最重要的是,uv 超級快! 官方說它比傳統方式快了 10 到 100 倍。就像從走路換成坐高鐵一樣!

image
Source

二、uv 比傳統 venv 更棒在哪?

功能傳統方法 (venv + pip)uv
速度慢,重複下載套件非常快,有快取功能
鎖檔要另外裝 pip-tools 或 poetry已經內建
版本管理要另外裝 pyenv 工具自動下載指定版本的 Python
工具執行要另外裝 pipx直接使用一次性工具執行
易用性要記很多不同工具一個工具搞定全部功能

三、為什麼每個開發者都應該養成使用虛擬環境的習慣?

🔧 真實痛點分享:我記得剛學 Python 的時候,為了做學校作業安裝了 numpy 1.19,結果同時要做另一個專案時,發現需要 numpy 1.21 才能跑。我天真地直接升級,結果之前的作業程式全部掛掉,當時真的快哭了!那時候我還不知道虛擬環境這個救星。

👥 團隊合作的慘痛經驗:和同學一起做專題時,我的電腦用 requests 2.31,他的電腦是 2.25,結果我們的 API 呼叫程式在我這邊跑得好好的,到他那邊就一直報錯。我們找 bug 找了整整一個下午,最後才發現是版本不同惹的禍!

💡 問題 1:為什麼我們需要虛擬環境?

你可以想像一下,如果你和室友共用一個書桌:

  • 你正在寫數學作業,需要計算機和直尺
  • 室友要畫圖,需要彩色筆和橡皮擦
  • 如果你們的工具混在一起,是不是很容易拿錯?

虛擬環境就像給每個人一個專屬的文具盒,這樣:

  • 數學作業不會被畫圖工具干擾
  • 每個專案都能用自己需要的「工具版本」
  • 就算安裝新工具,也不會影響到其他專案

💡 問題 2:什麼時候需要用虛擬環境?

  • 同時進行多個 Python 專案(就像同時修好幾科課程)
  • 和同學合作做專題(確保大家的「工具箱」一模一樣)
  • 想試用新套件但怕弄壞現有程式(就像想換新手機 App 但怕刪到重要資料)

💡 問題 3:建立好習慣的簡單步驟

  • 每次開新專案,第一件事就建立虛擬環境(就像搬進新房間先整理衣櫃)
  • requirements.txt 記錄需要哪些套件(就像列購物清單)
  • 記得把 .venv/ 加到 .gitignore(不要把整個房間都上傳到 GitHub)

💡 問題 4:新手常見疑問解答

Q:虛擬環境會佔用很多硬碟空間嗎? A:每個虛擬環境大約 10~30MB,就像一個小遊戲的大小,完全不用擔心!

Q:虛擬環境會不會把我的 Python 弄壞? A:絕對不會!虛擬環境就像在沙盒裡玩沙,只在自己的小天地裡運作,對外面的世界完全沒影響。

Q:忘記啟動虛擬環境怎麼辦? A:沒關係!只要重新啟動就好,就像忘記帶文具盒去教室,回去拿就好了。

小結:虛擬環境就像專屬工具箱 使用虛擬環境就像給每個專案準備一個專屬的工具箱,裡面放著這個專案需要的所有工具。這樣不同專案就不會互相干擾,也能確保和同學合作時大家用的工具都一樣。

四、超簡單的 uv 使用教學(連國中生都能學會!)

🎯 親身經歷分享:剛開始學 Python 時,光是搞懂 venv、pip、requirements.txt 這些東西就花了我好久時間。每次要開新專案都要敲一堆指令,有時候還會忘記步驟。自從用了 uv 之後,真的變得超簡單,一個指令就搞定!

以下步驟適合 Windows、macOS 和 Linux 使用者:

🚀 步驟 1:安裝 uv(只要做一次就好!)

Windows 使用者:

# 先安裝 pipx(如果還沒有的話)
pip install pipx

# 用 pipx 安裝 uv
pipx install uv

macOS 與 Linux 使用者:

# 官方推薦的安裝方式
curl -LsSf https://astral.sh/uv/install.sh | sh

💡 小提醒:就像下載 Line 或 Instagram 一樣,只要下載一次就可以一直用囉!

🏠 步驟 2:建立你的專案「小房間」

# 建立一個新的虛擬環境(就像蓋一間新房子)
uv venv

# 想要指定 Python 版本嗎?(就像選房間要幾坪大)
uv venv --python 3.12

🔑 步驟 3:進入你的專案房間

Windows 使用者:

.\.venv\Scripts\activate

macOS 與 Linux 使用者:

source .venv/bin/activate

🎉 成功指標:看到終端機前面出現 (.venv) 就表示你已經進入虛擬環境了!就像看到房門上貼著你的名字一樣。

📦 步驟 4:安裝你需要的工具(套件)

# 安裝單一套件(超快!)
uv pip install pandas

# 安裝多個套件
uv pip install pandas requests matplotlib

# 從檔案安裝所有套件(就像照購物清單買東西)
uv pip install -r requirements.txt

速度體驗分享:以前用 pip 安裝 pandas 要等 30 秒,用 uv 只要 3 秒!就像從撥接網路升級到光纖一樣爽快!

📝 步驟 5:記錄你用了哪些工具(製作清單)

# 建立套件清單(就像列出房間裡有什麼家具)
uv pip freeze > requirements.txt

# 建立更精確的鎖檔(確保每次都用相同版本)
uv pip compile requirements.in -o requirements.lock

# 依照鎖檔安裝(確保環境完全一樣)
uv pip sync requirements.lock

🛠️ 步驟 6:快速使用一次性工具

# 不用安裝就能使用工具(就像借朋友的計算機)
uv tool run black . # 格式化程式碼
uv tool run pytest # 執行測試

🎯 實用技巧:這個功能超讚!以前想用 black 格式化程式碼,還要先安裝,現在直接用就好了!


五、在不同環境使用 uv 的小技巧

🎓 在 Google Colab 使用 uv 的建議方式

雖然 Colab 無法直接使用虛擬環境(因為它本身就是個線上環境),但可以善用 uv 的快取與加速特性:

# 在 Colab 裡這樣用
!pip install uv
!uv pip install pandas numpy matplotlib

💡 小技巧:建議搭配 %%capture 抑制輸出,並於開頭一併執行,減少重複套件安裝時間。就像把購物清單一次買齊,不用每次都跑商店!

💻 在 Windows + VS Code 使用 uv 最佳實踐

這是學生和開發者最常用的組合:

  1. 開啟 VS Code Terminal:

    uv venv
    .\.venv\Scripts\activate
    uv pip install -r requirements.txt
  2. 在左下角 Python 解譯器切換到 .venv\Scripts\python.exe

  3. uv 加入 settings.json 內的 python.defaultInterpreterPath 以利預設載入

🎯 實用心得:這樣設定後,每次打開專案都會自動使用正確的 Python 環境,就像房間會自動切換到你需要的照明模式一樣方便!


六、怎麼從傳統 venv 換成 uv?

🔄 常見狀況:如果你已經習慣用 venv,沒關係!uv 很聰明,它可以跟你現有的虛擬環境和平共處。就像換了新的文具盒,舊的鉛筆還是可以用一樣!

如果你已經有 venv 的環境,完全不用重新開始:

# 在現有的虛擬環境裡,直接用 uv 安裝新套件
uv pip install 新套件名稱

# 用 uv 更新你的 requirements.txt
uv pip freeze > requirements.txt

💡 漸進式轉換小技巧:不用一次全部改掉,可以慢慢從新專案開始用 uv,舊專案照舊使用。就像換手機不用把所有照片都刪掉一樣!


七、哪些時候不適合使用 uv?

雖然 uv 很棒,但有些情況還是要用傳統工具:

  • 你的老師或主管堅持要用 Poetry(就像學校規定要穿制服一樣,沒辦法)
  • 公司專案已經用 Conda 管理科學運算套件(就像全班都在用某個 App,你也要跟著用)
  • 你需要一些特殊的 pip 參數(建議先確認 uv 是否支援)

🤷‍♂️ 實際建議:除了上述情況,大部分時候用 uv 都會讓你的開發更輕鬆!


八、如何移除 uv?

如果想要移除 uv,可執行以下步驟:

  1. 清除快取資料(非必要):
uv cache clean
  1. 刪除 uv 安裝的 Python 和工具:
rm -r "$(uv python dir)"
rm -r "$(uv tool dir)"
  1. 移除 uv 的執行檔(視安裝位置而定):
rm ~/.local/bin/uv ~/.local/bin/uvx

十、為什麼資深 Python 開發者會愛用 uv?

以下透過實際範例比較,說明 uv 為什麼更受資深開發者喜愛:

以下透過實際範例比較,說明 uv 為什麼更受資深開發者喜愛:

🆚 傳統方式

# 建立虛擬環境
python -m venv .venv
source .venv/bin/activate

# 安裝套件
pip install -r requirements.txt

# 建立鎖檔
pip install pip-tools
pip-compile requirements.in
pip-sync requirements.txt

✅ 使用 uv 的方式

# 建立虛擬環境(若沒安裝過指定版本會自動處理)
uv venv --python 3.11

# 安裝套件
uv pip install -r requirements.txt

# 鎖檔與同步
uv pip compile requirements.in -o requirements.lock
uv pip sync -r requirements.lock

✅ 其他實用命令

# 快速執行一次性工具,不汙染環境
uv tool run black .

# 移除全部快取與工具
uv cache clean

✅ 為什麼資深開發者會選 uv?

  • 節省時間:省略繁瑣安裝流程,一鍵完成
  • 減少工具切換:整合 venv、pip、pip-tools、pyenv、pipx
  • 更穩定:官方支援、鎖檔清楚、快取合理
  • 適合團隊:易於寫入 CI/CD,也適合教新手快速入門

根據官方說明與實務觀察,資深開發者選擇 uv 通常有以下幾個原因:

  • 速度就是生產力:uv 利用 Rust 高效處理封裝、快取與安裝,極大減少套件安裝與環境建立時間。
  • 整合工具多合一:uv 同時整合 venvpippip-toolspipxpyenv 的功能,一套工具即可搞定開發日常。
  • 強大的可重現性:內建 compilesync 機制,能保證部署時環境一致、版本鎖定穩定。
  • 自動管理 Python 版本:不必額外裝 pyenv,uv 可直接下載並使用特定版本的 Python,方便管理多版本開發需求。
  • 適合 CI/CD 與 Docker:uv 是單一可執行檔,非常容易整合到自動化流程,避免繁瑣相依設定。

這些優點讓資深開發者能更快速部署、更輕鬆維護專案環境。


⛓ 自動管理 Python 版本示範

uv 可以幫你自動下載與管理所需的 Python 版本,無需另外安裝 pyenv:

# 安裝指定版本的 Python(若尚未存在)
uv python install 3.11

# 建立虛擬環境,並自動使用該版本
uv venv --python 3.11

透過這方式,開發者在不同專案間可以快速切換對應版本,避免「系統版本不同」導致出錯。


⚙️ 在 CI/CD 與 Docker 中使用 uv 的範例

GitHub Actions CI 範例:

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: 安裝 uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh

- name: 安裝相依套件
run: uv pip install -r requirements.txt

- name: 執行測試
run: uv run pytest

Dockerfile 範例:

FROM python:3.11-slim

# 安裝 uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh

# 設定工作資料夾
WORKDIR /app
COPY . .

# 安裝套件
RUN uv pip install -r requirements.txt

CMD ["uv", "run", "python", "main.py"]

這讓部署流程更加簡潔、快速,特別適合雲端平台或自動測試環境。


結語

🔍 我自己的使用心得:以前我會忘記啟動虛擬環境,或裝在錯的地方,導致電腦裡的套件亂七八糟。自從開始用 uv 後,流程變得簡單不易出錯,尤其在教學生或帶新手時更順利。

uv 速度快又簡單,是 Python 開發的新好朋友。趕快試試看吧!

更多資訊:uv 官方 GitHub